package com.demo.java.OD651_700.OD660;

import java.util.Scanner;
import java.util.Arrays;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【新员工考试(A卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/147040918
 */
public class OdMain {

    // 用来存储最终符合条件的结果数量
    public static int result = 0;

    public static void main(String[] args) {
        // 输入Scanner，用于读取输入
        Scanner in = new Scanner(System.in);
        // 读取总分 N
        int N = in.nextInt();

        // 初始化所有题目的分数
        int[] num = new int[25]; // 总共有25道题
        // 给每道题目初始化默认分数为2分
        Arrays.fill(num, 2);

        // 对于题目数组，进行调整分数
        // 从第10题到第19题，分数改为4
        for (int i = 10; i < num.length; i++) {
            if (i < 20) {
                num[i] = 4;  // 第10到19题，每道题4分
            } else {
                num[i] = 8;  // 第20到24题，每道题8分
            }
        }

        // 调用深度优先搜索算法（DFS），从第0题开始，当前得分为0，错误次数为0，目标分数为N
        dfs(num, 0, 0, 0, N);

        // 输出符合条件的结果数
        System.out.println(result);
    }

    /**
     * 深度优先搜索算法（DFS），递归遍历所有可能的题目组合
     *
     * @param num  题目的分数数组
     * @param index 当前考察的题目索引
     * @param score 当前的得分
     * @param error_count 错误选择的次数
     * @param N 目标得分
     */
    public static void dfs(int[] num, int index, int score, int error_count, int N) {
        // 如果当前得分已经等于目标分数 N，说明找到了一种合法的题目组合
        if (score == N) {
            result++; // 结果数量加1
            return;
        }

        // 如果当前得分已经大于N，或者错误选择次数已经达到3次，则结束当前的递归
        if (score > N || error_count >= 3) return;

        // 遍历剩下的题目
        for (int i = index; i < num.length; i++) {
            // 选择当前题目
            score += num[i];
            // 递归处理下一题
            dfs(num, i + 1, score, error_count, N);
            // 撤销选择当前题目
            score -= num[i];
            // 错误选择次数加1
            error_count++;
        }
    }
}
